package com.spic.business.train.trainInfo.mapper;

import com.spic.business.train.trainInfo.domain.TrainInfo;
import com.spic.business.train.trainInfo.dto.TrainInfoAPPDto;
import com.spic.business.train.trainInfo.dto.TrainInfoAPPVo;
import com.spic.business.train.trainInfo.dto.TrainInfoVo;
import com.spic.business.train.trainInfo.dto.TrainListDto;

import java.util.List;

/**
 * 培训信息Mapper接口
 *
 * @author spic
 * @date 2021-10-15
 */

public interface TrainInfoMapper
{
    /**
     * 查询培训信息
     *
     * @param id 培训信息主键
     * @return 培训信息
     */
    public TrainInfo selectTrainInfoById(String id);

    /**
     * 查询培训信息列表
     *
     * @param trainListDto 培训信息
     * @return 培训信息集合
     */
    public List<TrainInfo> selectTrainInfoList(TrainListDto trainListDto);

    /**
     * 新增培训信息
     *
     * @param trainInfo 培训信息
     * @return 结果
     */
    public int insertTrainInfo(TrainInfo trainInfo);

    /**
     * 修改培训信息
     *
     * @param trainInfo 培训信息
     * @return 结果
     */
    public int updateTrainInfo(TrainInfo trainInfo);

    /**
     * 删除培训信息
     *
     * @param id 培训信息主键
     * @return 结果
     */
    public int deleteTrainInfoById(String id);

    /**
     * 批量删除培训信息
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTrainInfoByIds(String[] ids);

    /**
     * 开启培训
     */
    int starTrainInfoByIds(String[] ids);
    /**
     * 查询符合条件还没创建考试的培训
     */
    public List<TrainInfoVo>  selectTrainInfoListNotInexam();
    /**
     * 批量新增培训信息
     *
     * @param trainInfos 培训信息集合
     * @return 结果
     */
    int insertTrainInfos(List<TrainInfo> trainInfos);
    /**
     * 删除培训信息
     *
     * @param planId 培训方案主键
     * @return 结果
     */
    int deleteTrainInfoByPlanId(String planId);
    /**
     * 查询培训信息id列表
     *
     * @param planId 培训方案Id
     * @return 培训信息集合
     */
    List<String> selectTrainInfoByPlanId(String planId);
    /**
     * 查询本方案 未完成的培训数量
     * @param planId 培训方案Id
     * @return 数量
     * */
    int countTrainEnd(String planId);
    /**
     * 查询我的培训信息列表
     *
     * @param trainListDto 培训信息
     * @return 培训信息集合
     */
    List<TrainInfo> selectTrainInfoListByUserId(TrainListDto trainListDto);

    List<TrainInfoAPPVo> selectTrainInfoListByUserIdForApp(TrainInfoAPPDto trainInfoAPPDto);
    List<TrainInfoAPPVo> selectListByTrainInfoForApp(TrainInfoAPPDto trainInfoAPPDto);

    List<TrainInfoAPPVo> selectListByTrainInfoForAppCount(TrainInfoAPPDto trainInfoAPPDto);
}
